#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals; //这个命名空间可以使用时间单位s
class Talker :public rclcpp::Node
{
public:
    Talker():Node("talker_node_cpp")  //重写父类的构造函数
    {
        RCLCPP_INFO(this->get_logger(),"发布节点已创立!");
         //crete_publisher是ROS2中Node类的模板成员函数，它需要<>指定要发布的消息类型
        publisher_=this->create_publisher<std_msgs::msg::String>("chatter",10);//创建一个发布者对象，返回一个智能指针对象
        //可以粗略理解create_wall_timer(1s,this->on_timer)，它们需要绑定
        timer_=this->create_wall_timer(1s,std::bind(&Talker::on_timer,this));
    }
private:
    void on_timer()
    {
        auto message=std_msgs::msg::String();
        message.data="hello world!"+std::to_string(count++);
        //data是ROS2里的String类型，使用了%s,所以要转换成C字符串类型
        RCLCPP_INFO(this->get_logger(),"发布的消息是：%s",message.data.c_str());
        publisher_->publish(message);
    }
    std::shared_ptr<rclcpp::Publisher<std_msgs::msg::String>> publisher_;////智能指针是一个功能类似指针的模板类,一个智能指针存储一个发布对象类的地址
    std::shared_ptr<rclcpp::TimerBase> timer_;
    size_t count;
};
int main(int argc,char*argv[])
{
    rclcpp::init(argc,argv);
    rclcpp::spin(std::make_shared<Talker>());
    rclcpp::shutdown();
    return 0;
}
